dofile "lib/radical.lua" 

function tile(s) 
  return const.path.gfx.."game/med/"..s..".jpg"; 
end

function cm_tile(s) 
  return const.path.gfx.."game/common/"..s..".jpg"; 
end

function dxml(s)
  return const.path.dlg.."1-deadhour/med/"..s..".xml";
end

med = engine.state {
   _ret         = ""    --Return link
  ,_level       = 1     --Number of a current level of building
  ,_golevel     = nil   --Level to transfer
  ,_ask         = false --Kate asked where is doctor Kochevnikov
  ,_room        = false --Kate knows room number
  ,_info        = false --Kate read info on 2nd floor
  ,_room53      = false --Kate knows about room 53
  ,_level6      = false --Kate was told to ask where Kochevnikov is on level 6
  ,_girl        = false --Kate knows that girl on 5 floor is next to 53
  ,_valve       = false --Kate used valve to stop water
  ,_paper       = false --Kate returned a paper to girl on 5 floor
  ,_kirillov    = false --Kate talked with Kirillov
  ,_final       = false --Final stage of a quest
  ,_pochta      = false --Pochta is in the cells
}

med_player = musplayer.player {
   sfx("note"):inside("start")
  ,mus("hospitalsounds"):inside("level1_hall"):loop()
  ,mus("hospitalsounds"):inside("level1_coridor"):loop():always()
  ,sfx("ding"):inside("elevator_arrived"):always()
  ,sfx("elevator_door"):inside("elevator_door"):always()
  ,sfx("elevator_door"):inside("elevator_exit"):always()
  ,mus("juxtaposition"):inside("level2_coridor"):loop():always()
  
  ,sfx("dooropen_echo"):inside("level2_room22_open"):always()
  ,sfx("doorclose_echo"):inside("level2_room22_close"):always()
  ,sfx("dooropen_echo"):inside("level5_room53_open"):always()
  ,sfx("doorclose_echo"):inside("level5_room53_close"):always()
  
  ,mus("hospital2"):inside("level3_coridor"):loop():always()
  ,mus("hospital2"):inside("level3_coridor3"):loop():always()
  ,mus("waterdrops"):inside("level3_toilet"):loop():always()
  ,mus("juxtaposition"):inside("level4_coridor"):loop():always()
  ,mus("hospitalsounds"):inside("level5_coridor"):loop():always()
  ,mus("hospitalsounds"):inside("level5_coridor3"):loop():always()
  ,sfx("cloth"):inside("level4_line1"):always()
  ,sfx("cloth"):inside("level4_line2"):always()
  ,sfx("note"):inside("level5_room53")
  ,sfx("note"):inside("level6_address"):always()
}

main = engine.main {
   start        = chain_ {
                     episode_("1-med")
                    ,musplayer_("med_player")
                    ,walk_("start")
                  }
  ,finish       = gamefile_("1-deadhour/doc.lua")
}

start = cutscene {
   tile         = { tile "cross", 0, 100 }
  ,bounds       = { nil, 450, 900 }
  ,dsc          = [[Катя долго стояла у входа, не решаясь зайти. Совсем не так представляла она себе этот центр здоровья, о котором
                    ей рассказывали в районной поликлинике. Перед ней стояло неприметное бетонное здание, которое ничем не отличалось
                    от других жилых домов в этом районе. Вместо вывески, над входом был массивный навес, на котором из крашеных железных
                    панелей был выложен неровный крест.]]
  ,next         = "level1_hall"
}

function toilet_info()
  return staticitem {
     dsc        = "У двери в туалет висит {объявление}."
    ,act        = function(s)
                    med._ret = deref(here());
                    walk("toilet_scene");
                  end
    ,showonce   = true
  }
end

toilet_scene = scene {
   bounds       = { 250, 210, 460 }
  ,dsc          = [[Уважаемые посетители!^
                    Туалет на этом этаже закрыт на ремонт. Пользуйтесь туалетом на 3 этаже.^
                    С уважением, администрация.
                  ]]
  ,alwaysdsc    = true
  ,nav          = {
                    down = vw("Отойти", function() walk(med._ret) end)
                  }
}

-------------------------------------------------------------------------------
--Level 1
-------------------------------------------------------------------------------

level1_hall = scene {
   tile         = { tile "hall", 606, 20 }
  ,bounds       = { nil, 140, 600 }
  ,dsc          = [[Здесь довольно шумно и людно. Кате даже начинает казаться, что она не в медицинском центре, а на станции метро в
                    самый час пик.]]
  ,obj          = { "statist_sylo", "statist_teen", "statist_doctor", "receptionist" }
  ,nav          = {
                     up = vw("В коридор", "level1_coridor")
                  }
}

statist_sylo = staticitem {
   dsc          = "Из открытой двери какого-то {помещения} рядом со входом доносится резкий грохот и стук."
  ,act          = "Судя по всему, это какая-то техническая комната -- может, склад уборщика. Кате туда не нужно."
  ,showonce     = true
}

statist_teen = staticitem {
   dsc          = "Молодой {парень} у окна так громко говорит по мобильному телефону, что Катя отчетливо слышит каждое произносимое им слово."
  ,act          = "Судя по всему, он спорит с кем-то о своей страховке."
  ,showonce     = true
}

statist_doctor = staticitem {
   dsc          = "{Доктор} в помятом белом халате что-то возмущенно объясняет пожилому посетителю, который часто вздыхает и как-то раболепно кивает головой."
  ,act          = "Он слишком занят. Лучше не беспокоить его сейчас."
  ,showonce     = true
}

receptionist = staticitem {
   dsc          = "За мутными белыми стеклами, в приемной, сидит пожилая {женщина} в грязном медицинском халате."
  ,disable      = if_("med._ask")
  ,act          = walk_("receptionist_dlg")
}

receptionist_dlg = dialog {
   tile         = { tile "hall", 606, 20 }
  ,bounds       = { nil, 140, 600 }
  ,dlg          = dxml "receptionist"
}

level1_coridor = scene {
   tile         = tile "hall2"
  ,bounds       = { 220, 285, 740 }
  ,dsc          = "Коридор, перегороженный стеклянными экранами, кажется совсем узким."
  ,alwaysdsc    = true
  ,obj          = { "graphboard" }
  ,nav          = {
                     up = vw("В конец коридора", "level1_end")
                    ,down = vw("К приемной", "level1_hall")
                    ,right = vw("К лифту", "elevator_call")
                  }
}

graphboard = staticitem {
   dsc          = "На стене, рядом с лифтом, висит большое {табло} с расписанием работы врачей."
  ,act          = walk_("graphboard_scene")
  ,disable      = if_("med._room")
}

graphboard_scene = scene {
   bounds       = { 400, nil }
  ,alwaysdsc    = true
  ,obj          = { "fake1", "fake2", "fake3", "fake4", "fake5", "fake6", "fake7", "fake8", "fake9", "fake10", "fake17", "fake18", "fake19", "good_doctor", "fake11", "fake12", "fake13", "fake14", "fake15", "fake16", "fake20", "fake21", "fake22", "fake23", "fake24" }
  ,nav          = {
                     down = vw("Отойти", "level1_coridor")
                  }
}

function fake_doctor(dsc) 
  return staticitem {
     act        = "Нет, это не тот доктор, который нужен Кате."
    ,dsc        = "{"..dsc.."} ^"
    ,showonce   = true
  }
end
fake1 = fake_doctor("Леонтьев Н.Д.")
fake2 = fake_doctor("Ковалев В.В.")
fake3 = fake_doctor("Дружина Д.С.")
fake4 = fake_doctor("Ирнадский И.В.")
fake5 = fake_doctor("Кочетников К.А.")
fake6 = fake_doctor("Ворошилов С.П.")
fake7 = fake_doctor("Вершавина С.А.")
fake8 = fake_doctor("Кириллов А.П.")
fake9 = fake_doctor("Иванов П.Я.")
fake10 = fake_doctor("Сметанов К.Р.")
fake11 = fake_doctor("Морева О.В.")
fake12 = fake_doctor("Делянцев А.М.")
fake13 = fake_doctor("Кондратьев П.С.")
fake14 = fake_doctor("Ильин Д.А.")
fake15 = fake_doctor("Конин Н.П.")
fake16 = fake_doctor("Свериковская Л.Г.")
fake17 = fake_doctor("Леонидов Ю.В.")
fake18 = fake_doctor("Донцов К.А.")
fake19 = fake_doctor("Краевский И.И.")
fake20 = fake_doctor("Кочевникова Ю.В.")
fake21 = fake_doctor("Ковалевская А.С.")
fake22 = fake_doctor("Козырев М.П.")
fake23 = fake_doctor("Тихонов И.А.")
fake24 = fake_doctor("Кириллов А.А.")
good_doctor = staticitem {
   dsc          = "{Кочевников В.Я.} ^"
  ,act          = chain_ { set_("med._room"), "Время работы: с 10-00 до 15-00. Кабинет 23." }
}

level1_end = scene {
   tile         = { tile "hall3", 750, 206 }
  ,bounds       = { nil, 285, 740 }
  ,dsc          = "Коридор кажется таким длинным, что Катя даже не видит, где он заканчивается. Она начинает думать, что может легко заблудиться здесь."
  ,alwaysdsc    = true
  ,obj          = { "toilet_info1" }
  ,nav          = {
                     up = vw("В конец коридора", "level1_end2")
                    ,down = vw("К приемной", "level1_coridor")
                    ,left = vw("В туалет"):snd("doorclosed"):cnd("false", "Дверь закрыта.")
                  }
}

toilet_info1 = toilet_info();

level1_end2 = scene {
   tile         = tile "hall2"
  ,dsc          = [[В этой части коридора совсем сумеречно. Широкое окна почему-то заколочено фанерными листами, а половина 
                    ламп на потолке не горит. К тому же, на всех дверях здесь висят одинаковые таблички -- Ремонт.]]
  ,bounds       = { 220, 285, 740 }
  ,nav          = {
                    down = vw("К приемной", "level1_end")
                  }
}

-------------------------------------------------------------------------------
--Level 2
-------------------------------------------------------------------------------

level2_coridor = scene {
   tile         = tile "column"
  ,bounds       = { 120, nil, 760 }
  ,dsc          = "В коридоре так душно и пыльно, что у Кати даже начинает болеть голова."
  ,alwaysdsc    = true
  ,obj          = { "level2_board" }
  ,nav          = { 
                     up = vw("Вниз по коридору", "level2_coridor2")
                    ,down = vw("К лифту", "elevator_call")
                  }
}

level2_board = staticitem {
   dsc          = "На стене висит доска с одним-единственным {объявлением}."
  ,act          = walk_("level2_board_scene")
  ,showonce     = true
}

level2_board_scene = scene {
   bounds       = { 250, 210, 460 }
  ,dsc          = [[Уважаемые посетители!^
                    Доска объявлений предназначена для размещения информации, связанной с работой медицинского центра.
                    Пожалуйста, не размещайте здесь свои частные объявления.^
                    С уважением, администрация.
                  ]]
  ,nav          = {
                    down = vw("Отойти", "level2_coridor")
                  }
}

level2_coridor2 = scene {
   tile         = tile "chairs"
  ,dsc          = "На этом этаже всего несколько человек. Наверное, здесь не самое посещаемое отделение медицинского центра."
  ,obj          = { "level2_junkpaper", "toilet_info2" }
  ,nav          = {
                     up = vw("В конец коридора", "level2_coridor3")
                    ,down = vw("К лифту", "level2_coridor")
                    ,left = vw("Кабинет 21"):cnd("false", "Дверь закрыта."):snd("doorclosed")
                    ,right = vw("Кабинет 22", "level2_room22_open")
                  }
}

toilet_info2 = toilet_info();

level2_junkpaper = staticitem {
   dsc          = "На полу, рядом с мусорным ведром, валяется какой-то {клочок бумаги}."
  ,act          = "Это просто пустой бланк для рецепта."
  ,showonce     = true
}

level2_room22_open = pause {
   time         = 2500
  ,next         = "level2_room22"
}

level2_room22 = scene {
   tile         = { ctile "opendoor", 700, 20 }
  ,bounds       = { nil, nil, 660 }
  ,obj          = { "level2_room22_doctor" }
  ,nav          = {
                    down = vw("Выйти", "level2_room22_close")
                  }
}

level2_room22_close = pause {
   time         = 2500
  ,next         = "level2_coridor2"
}

level2_room22_doctor = staticitem {
   dsc          = "В маленькой комнатке, за железным столом, который кажется привинченным к полу, сидит сгорбленный пожилой {мужчина}."
  ,act          = walk_("level2_room22_dlg")
}

level2_room22_dlg = dialog {
   tile         = { ctile "opendoor", 700, 20 }
  ,bounds       = { nil, nil, 660 }
  ,dsc          = "-- Я что-то не понял... Разве я кого-то вызывал к себе?"
  ,src          = [[<phr a="-- Извините, я просто хотела спросить... Я ищу доктора Кочевникова..." b="-- Понятия не имею, где Ковечников. А теперь оставьте меня, пожалуйста.">
                      <phr a="-- Извините." b="" walk="back"></phr>
                    </phr>]]
}

level2_coridor3 = scene {
   tile         = { tile "bigwindow", 226, 100 }
  ,bounds       = { 50, 400 }
  ,alwaysdsc    = true
  ,obj          = { "medman", "medgirl", "medold", "level2_infopaper" }
  ,dsc          = "Это крыло здания довольно светлое. Глядя в окно, даже вспоминаешь, что еще только середина дня."
  ,nav          = {
                     down = vw("К лифту", "level2_coridor2")
                    ,left = vw("Кабинет 23"):cnd("false", "Дверь закрыта."):snd("doorclosed")
                    ,right = vw("Кабинет 24"):cnd("false", "Судя по всему, в этот кабинет очередь.")
                  }
}

level2_infopaper = staticitem {
   dsc          = "На стене под лампой висит обрывок какого-то {объявления}."
  ,act          = choose_ {
                     ["default"] = chain_ { set_("med._info"), "Судя по всему, недовольные посетители оторвали часть объявления. Кажется, в объявлении говорится, что доктора Кочевникова не будет, и его замещает врач в каком-то другом кабинете. К сожалению, номер кабинета оторван." }
                    ,["med._room53"] = chain_ { set_("med._info"), "Видимо, обрывок бумаги, который нашла Катя, был от этого объявления. Скорее всего, в объявлении говорится, что по срочным вопросам нужно обращаться в 53 кабинет." }
                  }
}

medold = staticitem {
   dsc          = "{Старик} напротив нее, кажется, с трудом борется со сном."
  ,act          = "Лучше его не беспокоить."
  ,showonce     = true
}

medman = staticitem {
   dsc          = "В кресле, спиной к Кате, сидит молодой {мужчина}."
  ,act          = walk_("medman_dlg")
}

medman_dlg = dialog {
   tile         = { tile "bigwindow", 226, 100 }
  ,bounds       = { 50, 400 }
  ,dsc          = "Мужчина даже не поворачивается к Кате."
  ,dlg          = dxml "medman"
}

medgirl = staticitem {
   dsc          = "Рядом с дверью в кабинет доктора Кочевникова стоит {девушка} в мятой куртке и джинсах."
  ,act          = walk_("medgirl_dlg")
}

medgirl_dlg = dialog {
   tile         = { tile "bigwindow", 226, 100 }
  ,bounds       = { 50, 400 }
  ,dsc          = "Девушка выглядит сильно уставшей, как будто стоит здесь в очереди уже не первый день."
  ,dlg          = dxml "medgirl"
}

-------------------------------------------------------------------------------
--Level 3
-------------------------------------------------------------------------------

level3_coridor = scene {
   tile         = tile "opendoor"
  ,bounds       = { 200, 120, 700 }
  ,dsc          = "В коридоре слышен шум от работы какого-то механизма."
  ,alwaysdsc    = true
  ,nav          = { 
                     up = vw("Вниз по коридору", "level3_coridor2")
                    ,down = vw("К лифту", "elevator_call")
                  }
}

level3_coridor2 = scene {
   tile         = { tile "armchairs", 650, 305 }
  ,dsc          = "Потертые кресла у стены покрыты пылью и кажутся сломанными. Впрочем, здесь все равно нет посетителей."
  ,alwaysdsc    = true
  ,obj          = { "level3_info" }
  ,nav          = {
                     up = vw("В конец коридора", "level3_coridor3")
                    ,down = vw("", "level3_coridor")
                    ,left = vw("Кабинет 31", ""):cnd("false", "Дверь закрыта."):snd("doorclosed")
                    ,right = vw("Кабинет 32", ""):cnd("false", "Дверь закрыта."):snd("doorclosed")
                  }
}

level3_info = staticitem {
   dsc          = "На стене висит {объявление}."
  ,act          = "Часть объявления оборвана. Можно прочитать только -- Уважаемые посетители! Сегодня по техни..."
  ,showonce     = true
}

level3_coridor3 = scene {
   tile         = tile "bigdoor"
  ,dsc          = "Перед Катей -- массивная дверь в какое-то служебное, как ей кажется, помещение."
  ,dscalways    = true
  ,obj          = { "level3_doctor", "level3_info2" }
  ,nav          = {
                     down = vw("К лифту", "level3_coridor2")
                    ,right = vw("В туалет", "level3_toilet")
                  }
}

level3_doctor = staticitem {
   dsc          = "У стены стоит молодой {доктор}."
  ,act          = walk_("level3_dlg")
}

level3_dlg = dialog {
   tile         = tile "bigdoor"
  ,dsc          = "Доктор что-то ищет в своем телефоне, раздосадованно покачивая головой."
  ,src          = [[<phr a="-- Здравствуйте! Извините, я..." b="-- Я сейчас занят."></phr>]]
}

level3_info2 = staticitem {
   dsc          = "Справа от Кати -- туалет, рядом с дверью в который висит {объявление}."
  ,act          = "Объявление частично оборвано, но, судя по всему, в нем говорится, что горячей воды в туалете нет."
  ,showonce     = true
}

level3_toilet = scene {
   tile         = cm_tile "toilet_wall"
  ,bounds       = { 150, nil, 700 }
  ,alwaysdsc    = true
  ,dsc          = [[Такое впечатление, что в этом туалете не убирались со времен постройки здания. Все стены потемнели от грязи,
                    плитка на полу потрескалась и похрустывает при каждом шаге, а вонь стоит такая, что Катю начинает выворачивать
                    наизнанку.]]
  ,obj          = { "level3_toilet_valve", "level3_paper" }
  ,left         = stop_music
  ,nav          = { 
                    down = vw("Выйти", "level3_coridor3")
                  }
}

level3_toilet_valve = staticitem {
   dsc          = "{Кран} у ближайшей мойки не завернут до конца, и из него капает вода."
  ,act          = chain_ { set_("med._valve"), "Катя повернула вентиль до упора, однако вода из крана почему-то стала течь сильнее. Похоже, все в этом здании работает неправильно." }
  ,cnd          = not_("med._valve")
}

level3_paper = item {
   nam          = "Направление на обследование"
  ,dsc          = "На полу валяется пустой пузырек из-под аспирина и какой-то {листик}."
  ,img          = ico "note-use"
  ,ico          = ico "note"
  ,tak          = "Катя подобрала лист -- это оказалось направление на обследование."
  ,use          = choose_ {
                     ["default"] = "В этом нет никакого смысла."
                    ,["level5_girl"] = chain_ { drop_("level3_paper"), set_("med._paper"), walk_("level5_girl_dlg") }
                  }
}

-------------------------------------------------------------------------------
--Level 4
-------------------------------------------------------------------------------

level4_coridor = scene {
   tile         = { tile "wire", 100, 20 }
  ,bounds       = { nil, 540, 900 }
  ,dsc          = [[На этом этаже совсем нет людей. Навесной потолок почти полностью разобран, и из отверстых панелей свисают какие-то провода.]]
  ,alwaysdsc    = true
  ,nav          = { 
                     up = vw("Вниз по коридору", "level4_coridor2")
                    ,down = vw("К лифту", "elevator_call")
                  }
}

level4_coridor2_pre = pause {
   tile         = { tile "line", 513, 400 }
  ,time         = 1
  ,fading       = 0
  ,next         = "level4_coridor2"
}

level4_coridor2 = scene {
   tile         = { tile "line", 513, 400 }
  ,dsc          = [[Кажется, проход вперед перегорожен.]]
  ,bounds       = { 570, 300, 370 }
  ,obj          = { "level4_board" }
  ,alwaysdsc    = true
  ,nav          = {
                     up = vw("В конец коридора", "level4_line1")
                    ,down = vw("К лифту", "level4_coridor")
                    ,left = vw("Кабинет 41"):cnd("false", "Дверь закрыта."):snd("doorclosed")
                    ,right = vw("Кабинет 42"):cnd("false", "Дверь закрыта."):snd("doorclosed")
                  }
}

level4_board = staticitem {
   dsc          = "Прямо посреди коридора стоит табличка с каким-то {объявлением}, от которой до ближайшей двери тянется длинная желтая лента."
  ,act          = walk_("level4_board_scene")
  ,showonce     = true
}

level4_board_scene = scene {
   bounds       = { 310, 250, 460 }
  ,dsc          = [[Внимание!^
                    Доступ посетителей на этот этаж закрыт в связи с заменой электропроводки.]]
  ,nav          = {
                    down = vw("Отойти", "level4_coridor2")
                  }
}

function worker_line(fwd,next) 
  local xs,endx,step = 513,801,6;
  if fwd then
    xs = 801;
    endx = 507;
    step = -6;
  end
  return engine.gameroom {
     fps        = 40
    ,fading     = 0
    ,tile       = { tile "line", xs, 400 }
    ,ontimer    = function(s,x,y)
                    if s.drawx == nil then
                      s.drawx = xs;
                    end
                    if s.drawx == endx then
                      sprite.free(s.sprcache);
                      s.drawx = nil;
                      s.sprcache = nil;
                      local of = game.fading;
                      walk(next);
                      return;
                    end
                    if s.sprcache == nil then
                      s.sprcache = sprite.load(tile "line");
                    end
                    sprite.copy(s.sprcache, s.pic, s.drawx, 380);
                    s.drawx = s.drawx + step;
                  end
  }
end

level4_line1 = worker_line(false,"level4_coridor3");
level4_line2 = worker_line(true,"level4_coridor2_pre");

level4_coridor3 = scene {
   tile         = { tile "cable", 100, 20}
  ,bounds       = { 270, nil, 580 }
  ,obj          = { "worker" }
  ,dsc          = [[Это уже конец коридора. Повсюду стоят какие-то ящики, через весь пол протянут огромный толстый кабель в грязной потресканой изоляции. 
                    Навесной потолок демонтирован, а двери кабинетов зачем-то сняты с петель,  как если бы  на этаже проводили капитальный ремонт. 
                    Кате даже начинает казаться, что она чувствует едкий обжигающий запах краски.^^]]
  ,alwaysdsc    = true
  ,nav          = {
                    down = vw("К лифту", "level4_line2")
                  }
}

worker = staticitem {
   dsc          = [[Катя даже не сразу замечает {мужчину} в пыльной одежде, который сгорбился где-то за вынесенными в коридор ящиками.]]
  ,act          = walk_("worker_dlg")
}

worker_dlg = dialog {
   tile         = { tile "cable", 100, 20}
  ,bounds       = { 270, nil, 580 }
  ,dsc          = "-- А вы что здесь делаете? Этот этаж закрыт!"
  ,dlg          = dxml "worker"
}

-------------------------------------------------------------------------------
--Level 5
-------------------------------------------------------------------------------

level5_coridor = scene {
   tile         = tile "wall1"
  ,bounds       = { 75, nil, 760 }
  ,dsc          = [[В коридоре стоит такая толкучка, что кажется, будто целую толпу людей заперли в комнатке не более метра в ширину.
                    Почти все держат в руках свои растрепанные медицинские карты и пытаются куда-то протиснуться -- в конец коридора,
                    к хлопающим вдалеке дверям, или к лифту.^
                    ]]
  ,alwaysdsc    = true
  ,obj          = { "level5_info1", "level5_info2" }
  ,nav          = { 
                     up = vw("Вниз по коридору", "level5_coridor2")
                    ,down = vw("К лифту", "elevator_call")
                  }
}

level5_info1 = staticitem {
   dsc          = "На стене висит {объявление}, написанное размашистым почерком от руки,"
  ,act          = walk_("level5_info1_scene")
  ,showonce     = true
}

level5_info1_scene = scene {
   bounds       = { 250, 210, 460 }
  ,alwaysdsc    = true
  ,dsc          = [[Господа!^
                    Ресурсы медицинского центра ограничены! Один доктор может принять в день не более десяти человек.
                    Также напоминаем вам, что администрация уже пошла вам на встречу и продлила время прохождения бесплатного
                    обследования по программе "Будущее нации" до конца июня. Также, прежде чем приходить на обследование,
                    ознакомьтесь с ограничениями и документами, которые вам необходимо собрать.^
                    Врачи не подрабатывают в справочном бюро и не принимают посетителей без требуемого пакета документов!
                  ]]
  ,nav          = {
                    down = vw("Отойти", "level5_coridor")
                  }
}

level5_info2 = staticitem {
   dsc          = "и еще одна {листовка}, отпечатанная и заламинированная."
  ,act          = walk_("level5_info2_scene")
  ,showonce     = true
}

level5_info2_scene = scene {
   bounds       = { 250, 160, 460 }
  ,alwaysdsc    = true
  ,dsc          = [[Список документов, которые необходимо иметь при себе для прохождение обследования по программе "Будущее нации":^^
                    1. Паспорт (регистрация в городе обязательна)^
                    2. Медицинская страховка (оригинал)^
                    3. Справка по форме TM-12 (направление)^
                    4. Справка по форме TK-14 (подтверждение)^
                    5. Медицинская карта^
                    6. Для мужчин -- свидетельство о приписке к воинскому участку^
                    7. Справка о дееспособности по форме AAT-146^^
                    На обследование по программе "Будущее нации" допускаются только лица старше 18 и моложе 40 лет. На время прохождения
                    обследования больничный лист не выдается!
                  ]]
  ,nav          = {
                    down = vw("Отойти", "level5_coridor")
                  }
}

level5_coridor2 = scene {
   tile         = tile "wall2"
  ,bounds       = { 75, nil, 760 }
  ,dsc          = "Людей столько, что можно подумать, будто сегодня последней в истории день приема в медицинском центре. Катя давно уже не видела такое скопление людей."
  ,alwaysdsc    = true
  ,obj          = { "level5_girl" }
  ,nav          = {
                     up = vw("В конец коридора", "level5_coridor3")
                    ,down = vw("К лифту", "level5_coridor")
                    ,left = vw("Кабинет 51"):cnd("false", "В этот кабинет большая очередь.")
                    ,right = vw("Кабинет 52"):cnd("false", "В этот кабинет большая очередь.")
                  }
}

level5_girl = staticitem {
   dsc          = "Ее внимание невольно привлекает молодая {женщина}, которая ссутулилась у стены и что-то нервно ищет в своей сумочке."
  ,act          = walk_("level5_girl_dlg")
  ,cnd          = not_("med._kirillov")
}

level5_girl_dlg = dialog {
   tile         = tile "wall2"
  ,bounds       = { 75, nil, 760 }
  ,dsc          = choose_ {
                    ["med._paper"] = "-- Да, да, это оно! Это мое направление! Боже, я уж думала, что все... Но где вы нашли его?"
                  }
  ,dlg          = dxml "girl"
}

level5_coridor3 = scene {
   tile         = tile "wall1"
  ,bounds       = { 75, nil, 760 }
  ,dsc          = "В каждый из кабинетов, слева и справа, выстроилась длинная очередь, состоящая в основном из молодых людей, ровесников Кати." 
  ,alwaysdsc    = true
  ,obj          = { "level5_line", "level5_info3" }
  ,nav          = {
                     down = vw("К лифту", "level5_coridor2")
                    ,left = vw("Кабинет 53"):cnd("false", "В этот кабинет большая очередь.")
                    ,right = vw("Кабинет 54"):cnd("false", "В этот кабинет большая очередь.")
                  }
}

level5_line = staticitem {
   dsc          = "И у {каждого} в руках -- растрепанная медицинская карта."
  ,act          = walk_("level5_line_dlg")
}

level5_line_dlg = dialog {
   tile         = tile "wall1"
  ,bounds       = { 75, nil, 760 }
  ,dsc          = "Многие явно стоят здесь уже не первый час."
  ,dlg          = dxml "line"
}

level5_info3 = toilet_info();

level5_wait = pause {
   fading       = 60
  ,enter        = stop_music
  ,time         = 2500
  ,next         = "level5_room53_open"
}

level5_room53_open = pause {
   time         = 2500
  ,next         = "level5_room53"
}

level5_room53 = dialog {
   tile         = tile "curtain"
  ,bounds       = { 340, nil, 560 }
  ,dsc          = "-- Минутку! Я помою руки... Ну а вы пока присаживайтесь, рассказывайте. Надеюсь, у вас-то хоть все документы с собой?"
  ,dlg          = dxml "kirillov"
}

level5_room53_close = pause {
   time         = 2500
  ,next         = "level5_coridor3"
}


-------------------------------------------------------------------------------
--Level 6
-------------------------------------------------------------------------------

level6_coridor = scene {
   tile         = { tile "ceillamp1", 200, 20 }
  ,bounds       = { nil, 500, 900 }
  ,dsc          = [[На этом этаже совсем тихо. Кате даже кажется, что массивные газовые лампы на потолке издают едва ощутимый,
                    навязчивый гул.]]
  ,alwaysdsc    = true
  ,obj          = { "level6_col", "level6_figure" }
  ,nav          = {
                     up = vw("Вниз по коридору", "level6_coridor2")
                    ,down = vw("К лифту", "elevator_call")
                  }
}

level6_figure = staticitem {
   dsc          = "Рядом с этой колонной стоит какой-то {человек} с массивной сумкой."
  ,act          = "Кажется, он опускает какие-то конверты в ящики."
  ,cnd          = if_("med._final and not med._pochta")
}

level6_col = staticitem {
   dsc          = "У стены стоит массивная колонна, на которой висят металлические {ящики}, похожие на почтовые ячейки."
  ,act          = choose_ {
                     ["default"] = "Судя по всему, это ячейки для документов с фамилиями сотрудников медицинского центра. Доктор Кочевников здесь тоже есть."
                    ,["med._final and not med._pochta"] = "Лучше сначала подождать, пока этот человек уйдет."
                    ,["med._final and med._pochta"] = "Из ящика доктора Кочевника торчит едва заметный край какого-то {level6_envelope1|конверта}."
                  }
}

level6_envelope1 = staticitem {
  act           = "Катя аккуратно вытащила конверт из ящика. Конверт {level6_envelope2|запечатан}, однако, судя по всему, это медицинская страховка Кочевникова."
}

level6_envelope2 = staticitem {
  act           = "Катя распечатала конверт. Внутри оказались пластиковая карточка медицинской страховки и договор. В конце договора -- Катя даже не поверила своим глазам -- был {level6_envelope3|адрес} Кочевникова."
}

level6_envelope3 = staticitem {
  act           = walk_("level6_address")
}

level6_address = pause {
   time         = 7000
  ,ondrawbg     = function(s,p)
                    drawing.draw_text(p, "ул. Садовническая, д. 21, п. 2,  кв. 354", 220, 260, nil, const.fontb, 26);
                    return p;
                  end
  ,next         = "main"
}

level6_coridor2 = scene {
   tiles        = {
                     { tile "boxes" }
                    ,{ tile "ceillamp1", 200, 20 }
                  }
  ,bounds       = { 120, 360, 500 }
  ,dsc          = "Здесь царит настоящий беспорядок."
  ,alwaysdsc    = true
  ,obj          = { "level6_copypaper" }
  ,nav          = {
                     up = vw("В конец коридора", "level6_coridor3")
                    ,left = vw("Дверь слева", "level6_room2")
                    ,right = vw("Дверь справа", "level6_room1")
                    ,down = vw("К лифту", "level6_coridor")
                  }
}

level6_copypaper = staticitem {
   dsc          = "У стены на полу выстроились пирамидой массивные картонные {коробки}."
  ,act          = "Это просто копировальная бумага, здесь нет ничего интересного."
  ,showonce     = true
}

level6_room1 = scene {
   tile         = { tile "desk", 724, 374 }
  ,dsc          = "Комнатка такая тесная, что кажется, будто бы раньше здесь была кладовая, которую потом приспособили под чей-то кабинет."
  ,alwaysdsc    = true
  ,obj          = { "clerk1" }
  ,nav          = {
                    down = vw("Выйти", "level6_coridor2")
                  }
}

clerk1 = staticitem {
   dsc          = "За столом сидит {мужчина} и со скучающим видом смотрит в мерцающий монитор."
  ,act          = walk_("clerk1_dlg")
}

clerk1_dlg = dialog {
   tile         = { tile "desk", 724, 374 }
  ,dsc          = "-- Вы что-то хотели?"
  ,src          = [[<phr a="-- Здравствуйте. Я ищу доктора Кочевникова. Может быть, вы... случайно знаете, где он?" b="-- Кого? Кочевникова? Честно говоря... Я вообще здесь недавно работаю. Спросите лучше у Литвинова, там... в соседнем кабинете.">
                      <phr a="-- Спасибо." b="" walk="back"></phr>
                    </phr>]]
}

level6_room2 = scene {
   tile         = { tile "office", 0, 20 }
  ,bounds       = { 140, 70, 700 }
  ,dsc          = "Некоторые лампы в комнате мерцают, и у Кати начинает рябить в глазах. Однако работников бухгалтерии это, похоже, не волнует."
  ,alwaysdsc    = true
  ,obj          = { "clerk2", "clerk3" }
  ,nav          = {
                    down = vw("Выйти", "level6_coridor2")
                  }
}

clerk2 = staticitem {
   dsc          = "Высокая {женщина} в белом свитере сидит в кресле у стены, глядя на высокую чашку, над которой поднимается едва заметный пар."
  ,act          = walk_("clerk2_dlg")
  ,cnd          = not_("med._kirillov")
}

clerk2_dlg = dialog {
   tile         = { tile "office", 0, 20 }
  ,bounds       = { 140, 70, 700 }
  ,dsc          = "Женщина даже не смотрит на Катю."
  ,src          = [[<phr a="-- Извините, я..." b="-- Девушка, у меня перерыв. Зайдите через час."></phr>]]
}

clerk3 = staticitem {
   dsc          = "{Мужчина} в мятом костюме что-то быстро печатает на компьютере за столом."
  ,act          = walk_("clerk3_dlg")
}

clerk3_dlg = dialog {
   tile         = { tile "office", 0, 20 }
  ,bounds       = { 140, 70, 700 }
  ,dsc          = "Мужчина продолжает что-то печатать, даже не глядя на клавиатуру."
  ,dlg          = dxml "litvinov"
}

level6_coridor3 = scene {
   tile         = { tile "ceillamp1", 200, 20 }
  ,obj          = { "level6_bin" }
  ,bounds       = { nil, 520 }
  ,fps          = 10
  ,alwaysdsc    = true
  ,dsc          = "Одна из потолочных ламп мерцает, издавая раздражающий треск."
  ,frames       = { "ceillamp1", "ceillamp2", "ceillamp3", "ceillamp4", "ceillamp3", "ceillamp2" }
  ,ontimer      = function(s,x,y)
                    if s.frame == nil then
                      s.frame = 1;
                    elseif s.frame > table.len(s.frames) then
                      s.frame = -60;
                    end
                    if s.frame == 1 then
                      play_sound("bulb2");
                    end
                    if s.frame > 0 then
                      local sp = sprite.load(tile(s.frames[s.frame]));
                      sprite.copy(sp, s.pic, 200, 0);
                      sprite.free();
                    end
                    s.frame = s.frame + 1;
                  end
  ,nav          = {
                    down = vw("К лифту", "level6_coridor2")
                  }
}

level6_bin = staticitem {
   dsc          = [[У стены валяется перевернутое {мусорное ведро} -- пустые банки из под содовой, одноразовые перчатки, клочки 
                    бумаги разлетелись по всему полу, однако, судя по всему, никому до этого нет дела.]]
  ,act          = chain_ { sound_("items"), walk_("level6_bin_scene") }
}

level6_bin_scene = scene {
   bounds       = { 250, 210, 460 }
  ,obj          = { 
                     xobj("Маленькая пластиковая {банка} из по-под таблеток привлекает внимание Кати.", "Сейчас даже нельзя понять, что в ней было -- наклейка содрана.", true)
                    ,xobj("Пара резиновых {перчаток} кажется совсем новой, как если бы ее выбросили по ошибке.", "Хотя, если подумать... трогать их руками совсем не хочется.", true)
                    ,xobj("Один из клочков бумаги можно заметить {следы крови}.", 
                          choose_ {
                             ["default"] = chain_ { set_("med._room53"), "Странно. Как будто кто-то порезался. А может, у кого-то пошла из носа кровь? Катя невольно пригляделась к листку бумаги. Это обрывок объявления. На нем можно отчетливо прочитать -- ...в кабинете 53." }
                            ,["med._info"] = chain_ { set_("med._room53"), "Странно. Как будто кто-то порезался. А может, у кого-то пошла из носа кровь? Катя невольно пригляделась к листку бумаги. Судя по всему, это обрывок того объявления со второго этажа. На нем можно отчетливо прочитать -- ...в кабинете 53." }
                          }
                          )
                    ,xobj("^Впрочем, Катя и сама {не понимает}, что она пытается найти в этой куче мусора.", walk_("level6_coridor3"))
                  }
  ,nav          = {
                    down = vw("Отойти", "level6_coridor3")
                  }
}


-------------------------------------------------------------------------------
--Elevator
-------------------------------------------------------------------------------

elevator_call = dialog {
   tile         = { tile "call1", 550, 250 }
  ,enter        = choose_ {
                    ["med._final"] = set_("med._pochta")
                  }
  ,bounds       = { 340, 255, 200 }
  ,dlg          = dxml "call"
}

elevator_arrive = pause {
   time         = 3000
  ,tile         = choose_ {
                     ["med._button==0"] = { tile "call3", 550, 250 }
                    ,["med._button==1"] = { tile "call2", 550, 250 }
                  }
  ,next         = "elevator_arrived"
}

elevator_arrived = pause {
   time         = 2000
  ,tile         = { tile "call1", 550, 250 }
  ,next         = "elevator_door"
}

elevator_door = pause {
   time         = 2000
  ,next         = "elevator"
}

elevator = dialog {
   ondrawbg     = function(s,p)
                    local spr = elevator_cabin:drawcabin(med._level);
                    sprite.copy(spr, p, 500, 74);
                    sprite.free(spr);
                    return p;
                  end
  ,enter        = stop_music
  ,bounds       = { 300, 120, 200 }
  ,dlg          = dxml "elevator"
}

elevator_exit = pause {
   time         = 2000
  ,next         = "elevator_hub"
}

elevator_hub = engine.hub {
  enter         = choose_ {
                     ["med._level==1"] = walk_("level1_coridor")
                    ,["med._level==2"] = walk_("level2_coridor")
                    ,["med._level==3"] = walk_("level3_coridor")
                    ,["med._level==4"] = walk_("level4_coridor")
                    ,["med._level==5"] = walk_("level5_coridor")
                    ,["med._level==6"] = walk_("level6_coridor")
                    ,["med._level==7"] = walk_("level7_coridor")
                    ,["med._level==8"] = walk_("level8_coridor")
                  }
}

elevator_transfer = scene {
   tiles        = {
                     { tile "elevator", 500, 74 }
                    ,{ tile "elevator_controls2", 580, 294 }
                  }
  ,enter        = function(s)
                    play_sound("button");
                    if med._golevel == med._level then
                      walk("elevator");
                    else
                      walk("elevator_cabin");
                    end
                  end
}

elevator_cabin = scene {
   fading       = 0
  ,nohud        = true
  ,drawcabin    = function(s,lv)
                    local p = sprite.box(200, 526, "black");
  
                    local sp1 = sprite.load(tile "elevator");
                    sprite.copy(sp1, p, 0, 0);
                    sprite.free(sp1);
                    
                    local sp2 = sprite.load(tile "elevator_controls2");
                    local sp3 = sprite.load(tile "elevator_controls");
                    local function drawit(x, y)
                      sprite.copy(sp3, x, y, 16, 16, sp2, x, y);
                    end
                    
                    if lv == 1 then
                      drawit(6, 6);
                    elseif lv == 2 then
                      drawit(27, 6);
                    elseif lv == 3 then
                      drawit(6, 27);
                    elseif lv == 4 then
                      drawit(27, 27);
                    elseif lv == 5 then
                      drawit(6, 48);
                    elseif lv == 6 then
                      drawit(27, 48);
                    elseif lv == 7 then
                      drawit(6, 69);
                    elseif lv == 8 then
                      drawit(27, 69);
                    end
                    
                    sprite.free(sp3);
                    
                    sprite.copy(sp2, p, 80, 220);
                    sprite.free(sp2);
                    
                    return p;
                  end
  ,ontimer      = function(s,x,y)
                    if s.sprcache == nil then
                      s.sprcache = s:drawcabin(med._golevel);
                    end
                    
                    if s._frames == nil then
                      s._frames = 0;
                      sprite.copy(s.sprcache, s.pic, 500, 54);
                    end
                    
                    local trip = 60 + math.abs(med._golevel - med._level) * 40;
                    s._frames = s._frames + 1;
                    
                    if s._frames == 40 then
                      play_sound("elevator_start");
                    elseif s._frames == 60 then
                      play_sound("elevator");
                    elseif s._frames == trip then
                      play_sound("elevator_stop");
                      sprite.copy(s.sprcache, s.pic, 500, 54);
                    elseif s._frames == trip+20 then
                      med._level = med._golevel;
                      med._golevel = nil;
                      sprite.free(s.sprcache);
                      s.sprcache = nil;
                      s._frames = nil;
                      walk("elevator");
                      return;
                    elseif s._frames > 60 and s._frames < trip then
                      if s.moveup then
                        sprite.copy(s.sprcache, s.pic, 500, 54);
                        s.moveup = false;
                      else
                        sprite.copy(s.sprcache, s.pic, 500, 56);
                        s.moveup = true;
                      end
                    end
                  end
}